The Session Initiation Protocol (SIP) is an application-level control protocol for setting up and tearing down sessions with one or more participants. Such sessions may typically involve Internet telephone calls (i.e., so-called Voice over Internet Protocol or VoIP calls) or video calls. However, SIP may be used in other applications where session initiation is required. Also, SIP is merely a signaling (control) protocol which serves to create, modify and terminate sessions, while other session protocols (e.g., Real-time Transport Protocol or RTP) are used to handle the actual transfer of the media content (e.g., voice or video data). Further, SIP acts as a carrier for the Session Description Protocol (SDP), which describes the media content of the session.
Network Address Translation (NAT) is a process that rewrites the source and/or destination addresses of Internet Protocol (IP) packets as they pass through a router or firewall to a global public IP address. The NAT process enables multiple hosts on a private network to access the Internet using the single public IP address. NAT also provides a degree of security by masking the internal private addresses from the public domain.
A fundamental problem exists between SIP applications and traditional NAT. That is, a SIP message may include one or more header fields. SIP header fields, such as “Via” and “Contact,” are used to convey message attributes and modify message meaning. The header fields contain private IP addresses which are sent by a session offering device to an answering device when a session is being initiated. The SIP messages (and thus header fields) are embedded in the bodies of one or more IP packets. However, traditional NAT only translates addresses in the header of an IP packet, not in the body of an IP packet. Therefore, the private addresses in the SIP messages are not translated and are thus unroutable in the public domain. This disables the session initiation process.
There are some existing solutions to this problem. Simple Traversal of User Datagram Protocol (UDP) Through NAT or STUN is a protocol that attempts to address this problem. However, STUN does not work with symmetric NAT. With symmetric NAT, all requests from the same internal IP address and port to a specific destination IP address and port are mapped to a unique external source IP address and port. If the same internal host sends a packet with the same source address and port to a different destination, a different mapping is used. Only an external host that receives a packet can send a packet back to the internal host.
Another solution to the SIP/NAT problem that is intended to work with symmetric NAT is the Traversal Using Relay NAT or TURN protocol. However, TURN requires relaying data though a server that resides on the public Internet. This adds to the complexity and cost of initiating a session.
Accordingly, there is a need for improved techniques for providing NAT in a SIP-based application.